package com.ny.mapper;

import com.ny.entity.Device;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;

import java.util.Date;
import java.util.List;
import java.util.Optional;

public interface DeviceRepository extends MongoRepository<Device, Integer> {
    List<Device> findAll();
    
    /**
     * 根据设备名称查询设备
     * @param deviceName 设备名称
     * @return 设备列表
     */
    List<Device> findByDeviceName(String deviceName);
    
    /**
     * 根据设备名称模糊查询设备
     * @param deviceName 设备名称
     * @return 设备列表
     */
    List<Device> findByDeviceNameContaining(String deviceName);
    
    /**
     * 根据设备名称查询单个设备
     * @param deviceName 设备名称
     * @return 设备Optional对象
     */
    Optional<Device> findByDeviceNameIs(String deviceName);
    
    /**
     * 根据状态查询设备
     * @param status 设备状态 (0-离线, 1-在线)
     * @return 设备列表
     */
    List<Device> findByStatus(Integer status);
    
    /**
     * 根据状态和时间范围查询设备
     * @param status 设备状态 (0-离线, 1-在线)
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 设备列表
     */
    @Query("{'status': ?0, 'created_time': {$gte: ?1, $lte: ?2}}")
    List<Device> findByStatusAndCreatedTimeBetween(Integer status, Date startTime, Date endTime);
    
    /**
     * 根据时间范围查询设备
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 设备列表
     */
    @Query("{'created_time': {$gte: ?0, $lte: ?1}}")
    List<Device> findByCreatedTimeBetween(Date startTime, Date endTime);
    
    /**
     * 根据设备ID删除设备
     * @param deviceId 设备ID
     */
    void deleteByDeviceId(Integer deviceId);
    
    /**
     * 根据设备ID查询设备
     * @param deviceId 设备ID
     * @return 设备列表
     */
    List<Device> findByDeviceId(Integer deviceId);
}